package com.cykj.pos.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.cykj.common.core.domain.AjaxResult;
import com.cykj.pos.domain.*;
import com.cykj.pos.domain.dto.*;
import com.cykj.pos.profit.dto.*;

import java.util.List;
import java.util.Map;

/**
 * 终端设备信息Service接口
 *
 * @author ruoyi
 * @date 2021-01-11
 */
public interface IBizPosMachineService extends IService<BizPosMachine> {
    String doCallBacks(String s);

    Long selVueCallBackmerchid(Long posId);

    Long posid(String s);

    int updataAllId(Long posId);

    /**
     * PosCode 通过设备posid获取设备poscode
     *
     * @param posId
     * @return
     */
    BizPosMachine selectposCode(Long posId);

    /**
     * 记录添加
     *
     * @param bizAllocAdjRecords
     * @return
     */
    Integer insertbaarecords(BizAllocAdjRecords bizAllocAdjRecords);

    HuaBoDTO getPersonByIds(Long s, Long merchId);

    /**
     * 查询code
     *
     * @param
     * @return
     */
    BizPosMachine poscode(Long s);

    /**
     * 查询code
     *
     * @param
     * @return
     */
    Long selBizMerchantuserid(Long merchId);

    /**
     * Vue划拨列表
     *
     * @param bizPosMachine
     * @return
     */
    List<VueCallBack> queryListHuaBo(VueCallBack bizPosMachine);

    /**
     * 查询列表
     */
    List<BizPosMachine> queryList(BizPosMachine bizPosMachine);

    /**
     * 查询所有商户终端机，并带条件查询
     *
     * @param merchants
     * @param machine
     * @return
     */
    public List<BizPosMachine> getMachinesOfAllMerchantsWithQueryConditions(List<BizMerchant> merchants, BizPosMachine machine);

    /**
     * 根据商户id仅获取其本级所有的终端机器（含激活与未激活）
     *
     * @param merchId
     * @return
     */
    public List<BizPosMachine> getPosMachineByMerchId(Long merchId);

    /**
     * 根据商户id获取本级和其下级所有的终端机器（含激活与未激活）
     *
     * @param merchId
     * @return
     */
    public List<BizPosMachine> getPosMachinesByMerchId(Long merchId);

    /**
     * 根据商户id获取本级和其下级所有的终端机器（含激活与未激活）并根据筛选条件进行查询
     *
     * @param merchId
     * @param terminalVo
     * @return
     */
    public List<BizPosMachine> getPosMachinesByMerchId(Long merchId, PosTerminalDTO terminalVo);

    /**
     * 根据商户id获取本级和其下级所有的终端机器（含激活与未激活）并根据筛选条件进行查询（带分页查询）
     *
     * @param merchId
     * @param terminalVo
     * @param pageNo
     * @param pageSize
     * @return
     */
    public List<MachineTransferDTO> getPagePosMachinesByMerchId(Long merchId, PosTerminalDTO terminalVo, int pageNo, int pageSize);

    /**
     * 区间查询商户下的POS终端机
     *
     * @param terminalDTO
     * @return
     */
    public List<BizPosMachine> getPosMachinesByInteval(PosTerminalDTO terminalDTO);

    /**
     * 获取商户总的终端数（含子商户终端数-激活与未激活终端数）
     *
     * @param merchId
     * @return
     */
    public Long getPosMachineCountsByMerchId(Long merchId);

    public int interRecords(BizPosMachineStatusRecords inbizPosMachineStatusRecords);

    public int updatebizPosMachine(String sn);

    /**
     * 获取商户已激活终端数（含子商户终端数-激活终端数）
     *
     * @param merchId
     * @return
     */
    public Long getPosMachineActivatedCountsByMerchId(Long merchId);

    /**
     * 获取商户当月或上月已激活终端数（含子商户终端数-激活终端数）
     *
     * @param merchId
     * @param thisMonth
     * @return
     */
    public Integer getPosMachineActivatedCountsByMerchId(Long merchId, String thisMonth);

    /**
     * 进行划拔回调操作并做相关操作记录
     *
     * @param posIdList
     * @param merchantId
     * @param loginUser
     * @param operType
     * @return 操作成功终端数量
     */
    public Integer doTheOperations(List<Long> posIdList, Long merchantId, Long loginUser, Integer operType, Long orderId);

    /**
     * 筛选条件获取
     *
     * @return
     */
    public List<Map<String, Object>> getPosFilterConditions();

    /**
     * 通过SN系列号获取机具信息
     *
     * @param snCode
     * @return
     */
    public BizPosMachine getPosMachineBySnCode(String snCode);

    public BizPosMachineStatusRecords getRecordsBySnCode(String snCode);

    /**
     * 商户pos激活时，供第三方接口调用
     *
     * @param terminalActivateDTO
     */
    public KuaiQianResult posMachineActivate(TerminalActivateDTO terminalActivateDTO);

    /**
     * 商户POS绑定，供第三方接口调用
     *
     * @param terminalBindDTO
     */
    public KuaiQianResult posMachineBind(TerminalBindDTO terminalBindDTO);

    /**
     * 获取商户总得POS机器数量
     *
     * @param merchantId
     * @return
     */
    Integer getPosMachineAllCountsByMerchId(Long merchantId);

    /**
     * 获得商户没有绑定和激活的POS机器数量
     *
     * @param merchId
     * @return
     */
    public Long getPosMachineNotActivatedAndBindCountsByMerchId(Long merchId);

    /**
     * 获取商户转移列表
     *
     * @param nickName
     * @return
     */
    List<MerchantsTransferDTO> getAllMerchantByNickName(String nickName);

    /**
     * 商户转移
     *
     * @param bizPosMachine
     */
    public void updateMerchantsTransfer(BizPosMachine bizPosMachine);

    /**
     * 导入pos机设备
     *
     * @param posList
     * @param updateSupport
     * @param operName
     * @return
     */
    public String importPosMachine(List<BizPosMachineTemporaryDTO> posList, boolean updateSupport, String operName);

    /**
     * 终端划拨搜索列表JLL
     *
     * @param
     * @return
     */
    List<TerminalDTO> getPosByMerchId(PosTerminalDTO terminalDTO);

    /**
     * VUE商户转移
     *
     * @param bizPosMachine
     * @return
     */
    int updateMerchantsTransferVue(BizPosMachine bizPosMachine);

    /**
     * Vue回调列表
     *
     * @param bizPosMachine
     * @return
     */
    List<VueCallBack> queryListCallBack(VueCallBack bizPosMachine);

    /**
     * VUE执行回调
     *
     * @param code
     * @return
     */
    int doCallBack(String code);

    /**
     * vue划拨时查询详细信息
     *
     * @param posId
     * @return
     */
    VueCallBack getPersonById(String posId);

    BizPosMachineSyncDTO selectBizPosMachinesn(String posCode);

    /**
     * vue划拨操作
     *
     * @param vueCallBack1
     * @return
     */
    int doTransfer(VueCallBack vueCallBack1);

    int doTransferEntry(VueCallBack vueCallBack1);

    /**
     * 获得pos机品牌信息（包含pos机器类型列表）
     *
     * @return
     */
    List<BizPosBrandType> getPosBrandList();

    /**
     * 盛付通绑定
     *
     * @param shengFuTongTradeDTO
     * @return
     */
    boolean posMachineSftBind(ShengFuTongTradeDTO shengFuTongTradeDTO);

    /**
     * 盛付通激活
     *
     * @param shengFuTongTradeDTO
     * @return
     */
    int posMachineSftActiv(ShengFuTongTradeDTO shengFuTongTradeDTO);

    /**
     * 盛付通结算
     *
     * @param shengFuTongTradeDTO
     * @return
     */
    int posMachineSftSettle(ShengFuTongTradeDTO shengFuTongTradeDTO);

    /**
     * 盛付通提现接口
     *
     * @param shengFuTongTradeDTO
     * @return
     */
    int posMachineSftDeposit(ShengFuTongTradeDTO shengFuTongTradeDTO);

    /**
     * 查询设备
     *
     * @param snCode
     * @return
     */
    BizPosMachine selectPosBySnCode(String snCode);

    /**
     * 查询终端费率ID
     *
     * @return
     */
    List<BizPosErminalRate> selectPosErminalRate();


    String importBizPos(List<BizPosMachine> userList, boolean updateSupport);

    void updatePosMachine(String snCode);

    void generateAllPosMerchParentRelated();

    void updatePosPosMachine(String snCode);

    String getVar();

//存设备
    void insertPosMachine(String fictitiousSnCode, Long merchId);

    String selectMerchantEntryPhone(Long id);

    List<BizPosMachine> selectBizPosMachineAllList();
    /**
     * 设备绑定 改成激活 绑定merchid
     * @param sn
     * @param merchId
     */
    void updatebizPosMachineMerchIdAndStatus(String sn, Long merchId);

    List<BizMerchantEntry> selectEntryAll();

    List<SynchronizationDataDTO> selectUuidIsNull();

    List<BizPosMachine> selectBizPosMachinesSn();

   int updateBizPosMachinesTerminalNo(BizPosMachine bizPosMachine11);

    List<BizProfitDeatail> selectfenrun(String uuid);


    Long selectParentId(Long merchId);

    /**
     * 定时任务查询所有设备
     * @return
     */
    List<BizPosMachine> timerGetAllPos();

    /**
     * zyf测试  没啥用
     * @return
     */
    List<BizHaofan> selzyf();

    public BizRenRunSubsidiesDTO selectBizRenRunSubsidiesKeyWord(Long merchId);

    int selectIsTransfer(WalletNewDTO bizPosMachine);

    BizPosMachine selectPosMachineType(WalletNewDTO bizPosMachine);

    BizPosMachine selmerchId1(String posCode);

    Long seluserid1(Long merchId1);

    Long seluserid(Long merchId);

    /**
     * VUE设备转移
     *
     * @param merchId,posCode
     * @return
     */
    int updateMerchantsEquipmentVue(Long merchId, String posCode);

    Long selectMerchantsEntry(String posCode);

    int updateMerchantsEntry(Long merchId, Long id);
    /**
     * 更新设备表为绑定状态
     * @param posCode
     */
    void updatePosPosMachineActivateStatusBySn(String posCode);

    SignatureDTO selectPosMoneyInfo(String merchantNo);

    // 获取厂商
    List<StorageEquipment> getManufacturer();
    //  获取设备型号
    List<StorageEquipment> getManufacturerModel(Long id);
    //获取服务费
    List<StorageEquipment> getServiceCharge(Long id);
    // 查询制造商
    StorageEquipment getManufacturerByid(String posName);
    String getUnitType(String posModel);
    /**
     * 设备修改
     * @param pospPosmachine
     * @return
     */
    int updateEquipment(PospPosmachine pospPosmachine);

    /**
     * 查询设备详情
     * @param posCode
     * @return
     */
    PospPosmachine getPosCodeInfo(String  posCode);

    int doTransfers(VueCallBack vueCallBack1);

    List<VueCallBack> queryListExport(VueCallBack bizPosMachine);

    AjaxResult allocationSn(AllocationRelation allocationRelation);

    AjaxResult posMachineList(BizPosMachine bizPosMachine);

    AjaxResult posMachineTransList(PosTerminalDTO posTerminalDTO);

    AjaxResult posMachineIntervalList(PosTerminalDTO posTerminalDTO);

    AjaxResult posMachineIntervalServiceFlow(PosTerminalDTO posTerminalDTO);

    AjaxResult posMachineTransferRecords(BizTransferRecords bizTransferRecords);

    AjaxResult posMachineUnActiveList(BizPosMachine bizPosMachine);

    AjaxResult channelList();

    AjaxResult posMachineTransferDetail(BizTransferRecords bizTransferRecords);

    AjaxResult pictureStore(BizPictureStore bizPictureStore);

    AjaxResult pictureBackChannels();

    CustomerCashBackTemp getCCBTPolicy(Long customerCashBackId);


    /**
     * 查询入库台数，总激活数，上月激活数
     * @param merchId
     * @param channel
     * @param format
     * @return
     */
    TeamOverviewDTO selectPosNumAndActiveNum(Long merchId, String channel, String format);

    AjaxResult backPosCodeList(PosTerminalDTO posTerminalDTO);

    AjaxResult backPosCode(AllocationRelation allocationRelation);

    List<BizMercahntFeeNameDTO> echoFeeId5563();

    AjaxResult backPosCodeIntervalList(PosTerminalDTO posTerminalDTO);

    void updateFee(String deviceSn, String feeId);

    BizPosMachine getPosMachineBySnCodeNot0SimAmt(String posSn);

    List<String> getPosByMerchIds();

    AjaxResult querySettlementTemp(BizPosMachine bizPosMachine);

    AjaxResult jlUpdateDep(PospPosmachine pospPosmachine);
}
